import { defineStore } from 'pinia';

export const useDataScreenListStore = defineStore('dataScreenList', () => {
  const address: any[] = ['越城区', '柯桥区', '上虞区', '诸暨市', '新昌县'];
  const company: any[] = ['中国电信股份有限公司绍兴分公司(本部)', '中国电信股份有限公司柯桥分公司', '中国电信股份有限公司上虞分公司', '中国电信股份有限公司诸暨分公司', '中国电信股份有限公司嵊州分公司', '中国电信股份有限公司新昌分公司'];
  const companyAndAddress: any = {
    越城区: [
      { name: '中国电信股份有限公司绍兴分公司(本部)' },
    ],
    柯桥区: [
      { name: '中国电信股份有限公司柯桥分公司' },
    ],
    上虞区: [
      { name: '中国电信股份有限公司上虞分公司' },
    ],
    诸暨市: [
      { name: '中国电信股份有限公司诸暨分公司' },
    ],
    嵊州市: [
      { name: '中国电信股份有限公司嵊州分公司' },
    ],
    新昌县: [
      { name: '中国电信股份有限公司新昌分公司' },
    ],
  };
  interface totalData_company_Item {
    name: string// 公司名称
    total: number// 公司总人数
    common: number// 公司中通过研发通用认证的总人数
    common_L1: number// 公司中通过研发通用认证L1的总人数
    common_L2: number// 公司中通过研发通用认证L2的总人数
    common_L3: number// 公司中通过研发通用认证L3的总人数
    profession: number// 公司中通过研发专业认证的总人数
    profession_L1: number// 公司中通过研发专业认证L1的总人数
    profession_L2: number// 公司中通过研发专业认证L2的总人数
    profession_L3: number// 公司中通过研发专业认证L3的总人数
    experience: number// 公司中有研发工程师验证级别的总人数
    experience_L1: number// 公司中有研发工程师验证级别L1的总人数
    experience_L2: number// 公司中有研发工程师验证级别L2的总人数
    experience_L3: number// 公司中有研发工程师验证级别L3的总人数
    engineer: number// 获得研发工程师验证级别总人数
    engineer_L1: number// 获得研发工程师验证级别L1总人数
    engineer_L2: number// 获得研发工程师验证级别L2总人数
    engineer_L3: number// 获得研发工程师验证级别L3总人数
  }
  interface totalData_Item {
    company: totalData_company_Item[]// 公司相关统计数据
    address: string// 公司所处
  }
  interface companyData_Item {
    name: string// 公司名称
    data: any[]// 公司数据
  }
  const allData = ref<any[]>([]);// 总相关数据
  const sxData = ref<any>();// 绍兴的总统计数量
  const companyData = ref<companyData_Item[]>([]);// 各公司的相关数据
  const companyTotalData = ref<totalData_Item[]>([]);// 各公司的总统计数量
  // 初始化数据
  const initializedData = () => {
    allData.value = [];
    sxData.value = [];
    companyTotalData.value = [];
    companyData.value = [];
  };
  // 获取全部数据
  const getData = async () => {
    await getCertificationList().then((res: any) => {
      allData.value = res.data;
    });
  };
  // 获取各公司相关数据
  const isInCompany = (company: string, data: any) => {
    let flag: boolean = false;
    data.forEach((item: any) => {
      if (item.name === company) {
        flag = true;
      }
    });
    return flag;
  };
  const getCData = async () => {
    companyData.value = [];
    allData.value.forEach((item: any) => {
      if (isInCompany(item.company, companyData.value)) {
        companyData.value.forEach((citem) => {
          if (citem.name === item.company) {
            citem.data.push(item);
          }
        });
      }
      else {
        companyData.value.push({
          name: item.company,
          data: [item],
        });
      }
    });
  };
  // 统计给的数据的对应通过人数
  const countNumber = (data: any[], companyName: string) => {
    const countData: totalData_company_Item = {
      name: companyName,
      total: data.length,
      common: 0,
      common_L1: 0,
      common_L2: 0,
      common_L3: 0,
      profession: 0,
      profession_L1: 0,
      profession_L2: 0,
      profession_L3: 0,
      experience: 0,
      experience_L1: 0,
      experience_L2: 0,
      experience_L3: 0,
      engineer: 0,
      engineer_L1: 0,
      engineer_L2: 0,
      engineer_L3: 0,
    };
    data.forEach((item: any) => {
      if (item.isRdCommon === 1) {
        countData.common++;
      }
      if (item.rdCommonLevel === '研发通用L1') {
        countData.common_L1++;
      }
      if (item.rdCommonLevel === '研发通用L2') {
        countData.common_L2++;
      }
      if (item.rdCommonLevel === '研发通用L3') {
        countData.common_L3++;
      }
      if (item.isRdProfession === 1) {
        countData.profession++;
      }
      if (item.rdProfessionLevel === '研发专业L1') {
        countData.profession_L1++;
      }
      if (item.rdProfessionLevel === '研发专业L2') {
        countData.profession_L2++;
      }
      if (item.rdProfessionLevel === '研发专业L3') {
        countData.profession_L3++;
      }
      if (item.rdExperienceLevel !== '研发经验L0') {
        countData.experience++;
      }
      if (item.rdExperienceLevel === '研发经验L1') {
        countData.experience_L1++;
      }
      if (item.rdExperienceLevel === '研发经验L2') {
        countData.experience_L2++;
      }
      if (item.rdExperienceLevel === '研发经验L3') {
        countData.experience_L3++;
      }
      if (item.engineerLevel !== '研发工程师L0') {
        countData.engineer++;
      }
      if (item.engineerLevel === '研发工程师L1') {
        countData.engineer_L1++;
      }
      if (item.engineerLevel === '研发工程师L2') {
        countData.engineer_L2++;
      }
      if (item.engineerLevel === '研发工程师L3') {
        countData.engineer_L3++;
      }
    });
    return countData;
  };
  // 根据公司名字获取数据
  const getDataByCompany = (data: companyData_Item[], name: string): any[] => {
    const item = data.find((item: companyData_Item) => item.name === name);
    return item ? item.data : []; // 如果找到匹配项，返回其 data，否则返回空数组
  };
  // 获取各公司统计数据
  // 去重
  function removeDuplicateAddresses(data: totalData_Item[]): totalData_Item[] {
    const seenAddresses: Record<string, boolean> = {};
    const uniqueData: totalData_Item[] = [];
    data.forEach((item) => {
      if (!seenAddresses[item.address]) {
        seenAddresses[item.address] = true;
        uniqueData.push(item);
      }
    });
    return uniqueData;
  }
  const getCTData = () => {
    company.forEach((cname: any) => {
      // 获取公司地址
      let address: string = '';
      for (const county in companyAndAddress) {
        if (Object.prototype.hasOwnProperty.call(companyAndAddress, county)) {
          const companiesInCounty = companyAndAddress[county];
          for (const company of companiesInCounty) {
            if (company.name === cname) {
              address = county;
              break;
            }
          }
          if (address !== '') {
            break;
          }
        }
      }
      // 获取公司统计数据
      const cData: any[] = getDataByCompany(companyData.value, cname);
      companyTotalData.value.push({
        address,
        company: [countNumber(cData, cname)],
      });
    });
  };
  // 获取总数据
  const getTotalData = async () => {
    initializedData();// 初始化
    await getData();// 获取总数据
    sxData.value = countNumber(allData.value, '绍兴市');// 获取绍兴是总统计数据
    await getCData();// 获取公司相关数据
    getCTData();// 获取公司相关统计数据
  };
  // 获取各种数据接口
  const getAllData = () => {
    return allData.value;
  };
  const getSxData = () => {
    return sxData.value;
  };
  const getCompanyData = () => {
    return companyData.value;
  };
  const getCompanyTotalData = () => {
    return removeDuplicateAddresses(companyTotalData.value);
  };
  // 根据条件筛选数据（认证和认证级别）
  const getDataByNameAndLevel = (data: any, name: string, level: string, dType: string) => {
    if (name === '单位') {
      return data.filter((item: any) => item[dType] === level);
    }
    if (level === '无') {
      if (name === '研发通用') {
        return data.filter((item: any) => item.isRdCommon === 0);
      }
      if (name === '研发专业') {
        return data.filter((item: any) => item.isRdProfession === 0);
      }
      if (name === '研发经验') {
        return data.filter((item: any) => item.rdExperienceLevel === '研发经验L0');
      }
      if (name === '研发工程师') {
        return data.filter((item: any) => item.engineerLevel === '研发工程师L0');
      }
    }
    else {
      return data.filter((item: any) => item[dType] === name + level);
    }
  };
  return {
    address,
    company,
    companyAndAddress,
    getTotalData, // 先获取全部的数据才可以获取下面的数据
    getAllData,
    getSxData,
    getCompanyData,
    getCompanyTotalData,
    getDataByCompany,
    getData,
    getDataByNameAndLevel,
  };
}, {
  persist: true,
});
